

function Workshop(teacher) {
this.teacher = teacher ;
}
Workshop.prototype.ask = function (question) {
console.log(this.teacher, question)
}
var deepJS = new Workshop("Kyle");
console.log(deepJS.constructor === Workshop) ;
console.log(deepJS.__proto__ === Workshop.prototype);
console.log(Object.getPrototypeOf(deepJS) === Workshop.prototype)
constructor 沒有報錯。如果昨天你有理解 prototype chain,應該會知道 沿著虛線找 的邏輯,這邊也同樣可以應用。
deepJS 有沒有 constructor 。 (沒有找到)有找到 constructor。這時候的 constructor 是一條從 Workshop.prototype 指回去 Workshop 的方向。
所以 (Workshop.prototype).constructor 就是 Workshop

很多底線,口語上要描述會變成 deepJS dot Underscore Underscore proto Underscore Underscore ,
太麻煩了,你可以說 double Underscore proto,但還有一個更短的說法,
就簡稱 dunder proto 。
所以 line 12 的 deepJS 看起來像是要找有 dunderproto 這個屬性(property),
因為 deepJS 沒有,所以會沿著線往上指向 WorkShop.prototype。
(此時為 true)
但假若 WorkShop.prototype 也找不到,其實還會再往上找,這時候往上就是 Object.prototype 了。
很神奇的是,Object.prototype 有這個 dunderproto 東西,
但 dunderproto 其實不是 屬性(property),是一個 getter function !
Object.prototype有一個 getter function 叫做dunderproto。

// 不過值是 null ,因為是最上層了
綜合來看,line 12 直接找到 Object.prototype 裡面的 getter function 叫做 dunderproto,
此時,如果 getter function 裡面有 this ,其實 this 還是 line 12 的 deepJS 。

如果 function 已經用 bind() 綁定,可以重新綁定嗎?
如果在 arrow function 裡面宣告一個變數,這個變數的 scope 是 arrow function 還是 parent scope ?
有 lexical scope 。lexical scope 和 this 是不一樣的東西,
前者是靜態的scope,後者是 JavaScript 模仿動態 scope 的一種行為 。
如果 this 是一個 callback function , this 的值是取決於哪個 higher order function 嗎?
誰呼叫他,所以這個例子是對的。function return function 是另一種技巧,之後考慮寫 functional programming 的系列文章,不過就沒有那麼硬一天一篇了,也還在考慮要不要投技術週刊可以人有幫忙審稿 XDD。
使用 dunderproto (proto) 到底會發生什麼事?
Object.setPrototypeOf() 或是 Object.getPrototypeOf()
面試會想電你的時候用到,如果面試的考官說他們有在實際 prod 上寫這種語法(直接用 dunderproto 不用暴露好的 API),建議你不要去那種公司。什麼時候會有圖上兩條方向的線,什麼時候只有單向的虛線?
- 一般的 function : function declaration , function expression , named function, anonymous function 都有 prototype
- arrow function 沒有 prototype (方形)物件,所以你用 new 去呼叫 arrow function ,會報錯。
![]()
super keyword 是什麼?
不是 動態綁定,所以創造的時候所有東西都要寫好。create object literal with method, linked to the object